﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL.Interfejsi;
using MySql.Data.MySqlClient;
using OOAD_PROJEKAT;

namespace DAL
{
    partial class DAL
    {
        public class PolicaDAO : IDaoCrud<PolicaOsiguranja>
        {

            protected MySqlCommand c;

            public long create(PolicaOsiguranja p)
            {
                try
                {

                    c = new MySqlCommand();
                    c.CommandText = "insert into police values (@idPolice, @cijena, @datumPotpisivanja, @datumIsteka, @popust, @karakteristike, @evidentirana, @idKlijenta, @idZaposlenika, @idAutomobila)";
                    c.Parameters.AddWithValue("@idPolice", "");
                    c.Parameters.AddWithValue("@cijena", p.Cijena);
                    c.Parameters.AddWithValue("@datumPotpisivanja", p.DatumPotpisivanja);
                    c.Parameters.AddWithValue("@datumIsteka", p.DatumIsteka);
                    c.Parameters.AddWithValue("@popust", p.Popust);
                    c.Parameters.AddWithValue("@karakteristike", p.KarakteristikePolice);
                    c.Parameters.AddWithValue("@evidentirana", p.Evidentirana);
                    c.Parameters.AddWithValue("@idKlijenta", p.IdKlijenta);
                    c.Parameters.AddWithValue("@idZaposlenika", p.IdZaposlenika);
                    c.Parameters.AddWithValue("@idAutomobila", p.IdAutomobila);


                    c.Connection = con;
                    c.ExecuteNonQuery();

                    return c.LastInsertedId;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public List<PolicaOsiguranja> getAll()
            {
                try
                {
                    c = new MySqlCommand("select * from police", con);
                    MySqlDataReader r = c.ExecuteReader();
                    List<PolicaOsiguranja> police = new List<PolicaOsiguranja>();
                    while (r.Read())
                        police.Add(new PolicaOsiguranja(r.GetInt32("idPolice"), r.GetDouble("cijena"), r.GetDouble("popust"), r.GetDateTime("datumPotpisivanja"), r.GetDateTime("datumIsteka"), r.GetBoolean("evidentirana"),
                        r.GetString("karakteristike"), r.GetInt32("idKlijenta"), r.GetInt32("idZaposlenika"), r.GetInt32("idAutomobila")));

                    r.Close();
                    return police;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }



            public PolicaOsiguranja read(PolicaOsiguranja p)
            {
                try
                {

                    string commandStr = "select * from police where idPolice=" + p.Id;
                    c = new MySqlCommand(commandStr, con);
                    MySqlDataReader r = c.ExecuteReader();
                    PolicaOsiguranja pr = null;
                    if (r.Read())
                        pr = new PolicaOsiguranja(r.GetInt32("idPolice"), r.GetDouble("cijena"), r.GetDouble("popust"), r.GetDateTime("datumPotpisivanja"), r.GetDateTime("datumIsteka"), r.GetBoolean("evidentirana"),
                                 r.GetString("karakteristike"), r.GetInt32("idKlijenta"), r.GetInt32("idZaposlenika"), r.GetInt32("idAutomobila"));

                    r.Close();
                    return pr;
                }

                catch (Exception e)
                {
                    throw e;
                }
            }

            public PolicaOsiguranja update(PolicaOsiguranja p)
            {
                try
                {
                    String commandStr = "update police set cijena = ?cijena, datumPotpisivanja = ?datumPotpisivanja, datumIsteka = ?datumIsteka, popust = ?popust, karakteristike = ?karakteristike, evidentirana = ?evidentirana, ";
                    commandStr += "idKlijenta = ?idKlijenta, idZaposlenika = ?idZaposlenika, idAutomobila = ?idAutomobila where idPolice=" + p.Id;

                    c = new MySqlCommand(commandStr, con);
                    c.Parameters.AddWithValue("?cijena", p.Cijena);
                    c.Parameters.AddWithValue("?datumPotpisivanja", p.DatumPotpisivanja);
                    c.Parameters.AddWithValue("?datumIsteka", p.DatumIsteka);
                    c.Parameters.AddWithValue("?popust", p.Popust);
                    c.Parameters.AddWithValue("?karakteristike", p.KarakteristikePolice);
                    c.Parameters.AddWithValue("?evidentirana", p.Evidentirana);
                    c.Parameters.AddWithValue("?idKlijenta", p.IdKlijenta);
                    c.Parameters.AddWithValue("?idZaposlenika", p.IdZaposlenika);
                    c.Parameters.AddWithValue("?idAutomobila", p.IdAutomobila);

                    c.ExecuteNonQuery();
                    return read(p);
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public void delete(PolicaOsiguranja z)
            {
                throw new NotImplementedException();
            }

            public PolicaOsiguranja getById(int id)
            {
                try
                {
                    PolicaOsiguranja p = new PolicaOsiguranja(id, 0, 0, DateTime.Now, DateTime.Now, false, "", 0, 0, 0);
                    return read(p);
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public List<PolicaOsiguranja> getByExample(string name, string value)
            {
                try
                {
                    c = new MySqlCommand("select * from police where " + name + "= '" + value + "'", con);
                    MySqlDataReader r = c.ExecuteReader();
                    List<PolicaOsiguranja> police = new List<PolicaOsiguranja>();
                    while (r.Read())
                        police.Add(new PolicaOsiguranja(r.GetInt32("idPolice"), r.GetDouble("cijena"), r.GetDouble("popust"), r.GetDateTime("datumPotpisivanja"), r.GetDateTime("datumIsteka"), r.GetBoolean("evidentirana"),
                                 r.GetString("karakteristike"), r.GetInt32("idKlijenta"), r.GetInt32("idZaposlenika"), r.GetInt32("idAutomobila")));

                    r.Close();
                    return police;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

        }
    }
}